package pe.gob.mimp.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import pe.gob.mimp.dao.CasoSocialDao;
import pe.gob.mimp.model.CasoSocial;
import pe.gob.mimp.model.CasoSocialBusqueda;

@Repository
public class CasoSocialDaoImpl extends AbstractDaoImpl<CasoSocial, Long>
		implements CasoSocialDao {

	protected CasoSocialDaoImpl() {
		super(CasoSocial.class);
		// TODO Auto-generated constructor stub
	}
	
	public CasoSocial getCasoSocialPorId(Long idCasosocial){
		return findById(idCasosocial);
	}
	
	public void saveCasoSocial(CasoSocial casoSocial) {
		saveOrUpdate(casoSocial);
	}

	@SuppressWarnings("unchecked")
	public List<CasoSocialBusqueda> buscaCasoSocial(
			CasoSocialBusqueda casoSocialBusqueda) {
		List<CasoSocialBusqueda> lista = null;
		Criteria criteria = getCurrentSession().createCriteria(
				CasoSocialBusqueda.class);
		if (casoSocialBusqueda.getApellidosNombres() != null && casoSocialBusqueda.getApellidosNombres() != "") {
			criteria.add(Restrictions.like("apellidosNombres",
					casoSocialBusqueda.getApellidosNombres() + '%'));
		}
		if (casoSocialBusqueda.getIdTipodocumento() != null) {
			criteria.add(Restrictions.eq("idTipodocumento",
					casoSocialBusqueda.getIdTipodocumento()));
		}
		if (casoSocialBusqueda.getNroDocumento() != null && casoSocialBusqueda.getNroDocumento() != "") {
			criteria.add(Restrictions.like("nroDocumento",
					casoSocialBusqueda.getNroDocumento() + '%'));
		}
		if (casoSocialBusqueda.getIdTipocaso() != null && casoSocialBusqueda.getIdTipocaso() != 0) {
			criteria.add(Restrictions.eq("idTipocaso",
					casoSocialBusqueda.getIdTipocaso()));
		}
		if (casoSocialBusqueda.getIdMotivo() != null && casoSocialBusqueda.getIdMotivo() != 0) {
			criteria.add(Restrictions.eq("idMotivo",
					casoSocialBusqueda.getIdMotivo()));
		}
		if (casoSocialBusqueda.getIdMedio() != null && casoSocialBusqueda.getIdMedio() != 0) {
			criteria.add(Restrictions.eq("idMedio",
					casoSocialBusqueda.getIdMedio()));
		}
		if (casoSocialBusqueda.getAnoRegistro() != null) {
			criteria.add(Restrictions.eq("anoRegistro",
					casoSocialBusqueda.getAnoRegistro()));
		}
		lista = criteria.list();
		return lista;
	}
	
	public CasoSocialBusqueda getCasoSocialResumen(Long idCasosocial) {
		return (CasoSocialBusqueda) getCurrentSession().get(CasoSocialBusqueda.class, idCasosocial);
	}
}
